package com.controladores.controlvehicular;


import java.util.ArrayList;

import com.controladores.controlvehicular.R;
import com.controladores.controlvehicular.basededatos.GestorBaseDatos;
import com.controladores.controlvehicular.controlador.Posicion;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polygon;
import com.google.android.gms.maps.model.PolygonOptions;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class Localizacion extends android.support.v4.app.FragmentActivity {
	GoogleMap mapaLocalizacion;
	private static double latitud = -3.9930435651614538;
	private static double longitud = -79.20223423413745;
	private transient String proveedor;
	private static final String TAG = "[SIMERT]";	
	private LocationManager locationManager;
	private static double lati;
	private static double longi;
	private static Posicion controlPosicion;
	private String mostrarMapa;
	private String mostrarZona;
	private double puntosX[];
	private double puntosY[];
	private String nombreUsuario;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_localizacion);
		//System.out.println("Nombre entra a sacar nombre zona ");
		
		ArrayList<String> puntosZonas =  new ArrayList<String>();
		puntosZonas=obtenerCoordenadasZonasTrabajo();
		puntosX = new double[puntosZonas.size()];
		puntosY = new double[puntosZonas.size()];
		for(int i=0; i<puntosZonas.size();i++){
			String puntoLatLong[] = puntosZonas.get(i).split(",");
			puntosX[i]=Double.parseDouble(puntoLatLong[0]);
			puntosY[i]=Double.parseDouble(puntoLatLong[1]);
			System.out.println("latitud "+puntosX[i]+" "+"longitud "+puntosY[i]);
		}
		obtenerCoordenadasZonasTrabajo();
		mapaLocalizacion = ((SupportMapFragment) getSupportFragmentManager()
				.findFragmentById(R.id.mapa)).getMap();
		LatLng vistaLoja = new LatLng(latitud, longitud);
		CameraPosition cp = new CameraPosition.Builder().target(vistaLoja)
				.zoom(16).build();
		CameraUpdate cu = CameraUpdateFactory.newCameraPosition(cp);
		mapaLocalizacion.animateCamera(cu);
		//lm=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
		locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
		//locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
		
		proveedor = LocationManager.GPS_PROVIDER;
		Location location = locationManager.getLastKnownLocation(proveedor);
		//Long time=location.getTime();
		//Date date = new Date(location.getTime());
		//Date date2 = new Date
		//System.out.println("hora gps" +date); 
		if (null != location) {
			lati = location.getLatitude();
			longi = location.getLongitude();
			mostrarMarcador(lati, longi);
			Log.d(TAG, "Cargada|||||||| la localización.");
		} else {
			Toast.makeText(getBaseContext(),
					"No funciona location con locationmanager",
					Toast.LENGTH_LONG).show();
			Log.d(TAG, "Localizacion nula");
		}
		locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new MyLocationListener());
		// mapaLocalizacion.setMyLocationEnabled(true);
		// mostrarMarcador(latitud,longitud);
		// lineas();
		//poligono();
		//posicion();
		// Toast.makeText(getBaseContext(), dblLatitud+"onCreate+"+dblLongitud,
		// Toast.LENGTH_LONG).show();
		// mostrarMarcador(dblLatitud,dblLongitud);
		
		//Aqui haceer la consulta para obtener puntosX puntosY
		//this.consultarCoordenadas();

		try {
			Bundle datosItemMostrarMapa = getIntent().getExtras();
			mostrarMapa = datosItemMostrarMapa.getString("MostrarMapa");
			//Enviar de extra el nombre de usuario (controlador)
			if(mostrarMapa.compareTo("Mostrar mapa")!=0){
				Intent aZonaC = new Intent(Localizacion.this,
						ZonasControl.class);
				startActivity(aZonaC);
			}else{
				//mostrarMarcador(lati, longi);
			}
				
		} catch (Exception e) {
			// TODO: handle exception
			System.out.println("Error de item" + e);
			//System.out.println("item mostrar mapa");
		}
		try {
			Bundle datosZonas = getIntent().getExtras();
			mostrarZona = datosZonas.getString("IrZona");
			if(mostrarZona.compareTo("Ir a zona")==0){
				controlPosicion = new Posicion();
				GestorBaseDatos manejador = new GestorBaseDatos(
						Localizacion.this);
				nombreUsuario="";
				try {
					manejador.abrirBaseDatos();
					nombreUsuario=manejador.consultarUsuario();
					manejador.close();
				} catch (Exception e) {
					// 
					System.out.println(e);
					//System.out.println("zona");
				}
				///encenderGPS();
				//controlPosicion.recibirDatos(this, puntosGeocercaX, puntosGeocercaY, nomUsuario);
				controlPosicion.recibirDatos(this, puntosX, puntosY, nombreUsuario);
				controlPosicion.execute();
				Intent aZonaC = new Intent(Localizacion.this,
						ZonasControl.class);
				startActivity(aZonaC);
			}
		} catch (Exception e) {
			// 
			System.out.println(e);
		}
		
	}

	
	 @Override 
	 protected void onPause(){ 
		 super.onPause();
		 //encenderGPS();
		 //locationManager.removeUpdates(new MyLocationListener()); 
	 }
	 
	 

	/*@Override
	protected void onResume() {
		super.onResume();
		locationManager.requestLocationUpdates(proveedor, 0, 0,
				new MyLocationListener());
		// cargaGoogleMap();
		// mapaLocalizacion.setMyLocationEnabled(true);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.localizacion, menu);
		return true;
	}*/
	
	/*public void encenderGPS(){
		locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
		locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);// o netword provider
		locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 20000, 0, locationListener);
	}
	
	public void apagarGPS(){
		locationManager.removeUpdates(locationListener);
	}*/
	
	public static Posicion obtenerHiloEjecucion(){
		Posicion cp = controlPosicion;
		return cp;
	}
	
	public ArrayList<String> obtenerCoordenadasZonasTrabajo(){
		ArrayList<String> coordenadasZonas = new ArrayList<String>();
		GestorBaseDatos manejador1 = new GestorBaseDatos(
				Localizacion.this);
		manejador1.abrirBaseDatos();
		int id=1;
		String horaInicio =manejador1.obtenerhoraInicioGeocerca(id);
		//System.out.println("Hora Inicio " +horaInicio);
		String coordenadasZonasTrabajo = "";
		coordenadasZonasTrabajo=manejador1.obtenerDatosPosicion(horaInicio);
		manejador1.close();
		String puntos[] = coordenadasZonasTrabajo.split(";");
		for(int i=0; i<puntos.length; i++){
			coordenadasZonas.add(puntos[i]);
		}
		System.out.println("tamaño lista puntos metodo "+coordenadasZonas.size());
		
		//String [] puntosUno=punto1.split(";"); 
		return coordenadasZonas;
	}
	
	/*public void posicion(){
		LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
		LocationListener mlocListener = new MyLocationListener();
		mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
	}*/
	


	public class MyLocationListener implements LocationListener {
		@Override
		public void onLocationChanged(Location loc) {
			// dblLongitud = loc.getLongitude();
			// dblLatitud = loc.getLatitude();
			lati = loc.getLatitude();
			longi = loc.getLongitude();
			Toast.makeText(getBaseContext(), lati + "la y lo" + longi,
					Toast.LENGTH_LONG).show();
			//mostrarMarcador(dblLatitud,dblLongitud);
			mapaLocalizacion.clear();
			mostrarMarcador(lati, longi);
			//mapaLocalizacion.clear();
		}

		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			Toast.makeText(getBaseContext(), "Proveedor desconectado",
					Toast.LENGTH_LONG).show();
		}

		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			Toast.makeText(getBaseContext(), "Proveedor conectado",
					Toast.LENGTH_LONG).show();
		}

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
		}
	}

	public void mostrarMarcador(double lat, double lnt) {
		//String posicionMostrar = lar
		mapaLocalizacion.addMarker(new MarkerOptions().position(
				new LatLng(lat, lnt)).title("Mi ubicación").snippet(lat+ "latitud y longitud mm" +lnt));

	}

	public static String obtenerPosicion() {
		String posicion = lati + "," + longi;
		return posicion;
	}
	
	/*public void notificacion(){		
		NotificationManager notificador = (NotificationManager)getSystemService(getBaseContext().NOTIFICATION_SERVICE);
		//Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
		Notification notificacion = new Notification(android.R.drawable.stat_sys_warning, "Mensaje de alerta", System.currentTimeMillis());
		//notificacion.sound = defaultSound;
		notificacion.defaults |= Notification.DEFAULT_SOUND;
		Intent notificacionIntent = new Intent(Localizacion.this,ZonasControl.class);
		PendingIntent contentIntent = PendingIntent.getActivity(getBaseContext(), 0, notificacionIntent, 0);
		notificacion.setLatestEventInfo(getBaseContext(),"Alerta", mensaje, contentIntent );
		notificacion.flags |= Notification.FLAG_AUTO_CANCEL;
		notificador.notify(ALERTA_ID, notificacion);							
		
	}*/
	

	public void poligono() {

		PolygonOptions opcionesPoligono = new PolygonOptions()
				.add(new LatLng(puntosX[0], puntosY[0]))
				.add(new LatLng(puntosX[1], puntosY[1]))
				.add(new LatLng(puntosX[2], puntosY[2]))
				.add(new LatLng(puntosX[3], puntosY[3]));

		// mapaLocalizacion.clear();
		Polygon poligono = mapaLocalizacion.addPolygon(opcionesPoligono);
		poligono.setFillColor(Color.YELLOW); // Relleno del pol??gono
		poligono.setStrokeColor(Color.GRAY); // Bordes del pol??gono

	}
	

	/*public void consultarCoordenadas(){
		GestorBaseDatos manejador = new GestorBaseDatos(
				Localizacion.this);
		manejador.abrirBaseDatos();
		String Ocho="8:00";
		manejador.consultarHoraInicio(Ocho);
		manejador.close();
		//Consultar coordenadas traer todas las coordenadas donde el horarioInicio es 8 de la ma??ana
		ArrayList<String> coordenadas=new ArrayList<String>();
		for(int i=0;i<coordenadas.size();i++){
			String latiLong = coordenadas.get(i);
			String [] puntoXY = descomposePunto(latiLong, ",");
			puntosX[i]=Double.parseDouble(puntoXY[0]);
			puntosY[i]=Double.parseDouble(puntoXY[1]);
			
		}
		
	}*/
	
	public String[] descomposePunto(String punto, String separador){
		String [] puntoXY = punto.split(separador);
		return puntoXY;
	}

}
